﻿using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using U8WebService.Common;
using static System.Net.Mime.MediaTypeNames;
using UFIDA.U8.U8APIFramework;
using System.Web.Services;
using MSXML2;
using UFIDA.U8.U8MOMAPIFramework;
using SqlKata.Execution;
using U8WebService.Models;

namespace U8WebService.BLL
{
    public partial class U8_PurchaseManagement : WebService
    {
        TxtLogHelper txt = new TxtLogHelper();
        U8_Base loginBase = new U8_Base();
    }

    public partial class U8_PurchaseManagement : WebService
    {
        //public ReturnResult PurchaseOrder(string jsonStr)
        //{
        //    ReturnResult rsl = new ReturnResult();
        //    try
        //    {
        //        txt.AddLogMsg("新增或修改采购订单开始执行:" + jsonStr);
        //        var json = JsonConvert.DeserializeObject<JObject>(jsonStr);

        //        #region 用户登录
        //        var loMsg = loginBase.CheckLogin(json["System"]["sAccID"].ToString(),
        //            json["System"]["sYear"].ToString(),
        //            json["System"]["sUserID"].ToString(),
        //            json["System"]["sPassword"].ToString(),
        //            json["System"]["sDate"].ToString(),
        //            json["System"]["sServer"].ToString());
        //        if (!loMsg.Result)
        //        {
        //            #region 登录失败立即返回结果
        //            rsl.Message = loMsg.Message;
        //            return rsl;
        //            #endregion
        //        }
        //        #endregion
        //        txt.AddLogMsg("登录成功，开始第二步:" + JsonConvert.SerializeObject(loMsg));
        //        //第二步：构造环境上下文对象，传入login，并按需设置其它上下文参数
        //        U8EnvContext envContext = new U8EnvContext();
        //        envContext.U8Login = (U8Login.clsLogin)loMsg.Data;

        //        envContext.SetApiContext("VoucherType", 1);
        //        envContext.SetApiContext("bPositive", true);
        //        envContext.SetApiContext("sBillType", string.Empty);
        //        envContext.SetApiContext("sBusType", "普通采购");

        //        txt.AddLogMsg("开始第三步");
        //        //第三步：设置API地址标识(Url)

        //        U8ApiAddress myApiAddress = new U8ApiAddress("U8API/PurchaseOrder/VoucherSave");

        //        txt.AddLogMsg(string.Format("开始第四步：{0}", JsonConvert.SerializeObject(myApiAddress)));
        //        //第四步：构造APIBroker
        //        U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
        //        txt.AddLogMsg("开始第五步");
        //        //给普通参数VouchType赋值。此参数的数据类型为System.String，此参数按值传递，表示单据类型：10
        //        //broker.AssignNormalValue("VouchType", "1");

        //        var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
        //        txt.AddLogMsg(string.Format("接收的header参数：{0}", json["Head"].ToString()));

        //        MSXML2.DOMDocument domH = new DOMDocumentClass();
        //        string path = this.Server.MapPath(@"\");
        //        domH.load(path + "DomXML\\PoPomaindomhead.xml");

        //        U8APIHelper.FormatDom(ref domH, 1, "A");

        //        MSXML2.IXMLDOMNodeList domNodesHead = domH.childNodes[0].childNodes[1].childNodes;

        //        txt.AddLogMsg("开始获取数据构建表头数据:" + json["Head"].ToString());
        //        foreach (var obj in header.Properties())
        //        {
        //            domNodesHead[0].attributes.getNamedItem(obj.Name).nodeValue = obj.Value; //解析json，填充数据（主表）
        //        }

        //        ((IXMLDOMElement)domNodesHead[0]).setAttribute("bWireless", "1");  //解决WebService生成单据慢问题
        //        broker.AssignNormalValue("DomHead", domH);

        //        txt.AddLogMsg(string.Format("表头数据添加完成：{0}", DateTime.Now.ToString()));

        //        // 找不到Dom文件，只能重新构建对象
        //        //BusinessObject DomHead = broker.GetBoParam("DomHead");
        //        //DomHead.RowCount = 1; //设置BO对象(表头)行数，只能为一行



        //        //var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
        //        //txt.AddLogMsg(string.Format("接收的header参数：{0}", json["Head"].ToString()));
        //        //foreach (var obj in header.Properties())
        //        //{
        //        //    DomHead[0][obj.Name.ToString()] = obj.Value.ToString();
        //        //}
        //        //txt.AddLogMsg("表头构建完成");

        //        // 设置表体

        //        var list = JsonConvert.DeserializeObject<List<JObject>>(json["List"].ToString());

        //        MSXML2.DOMDocument domB = new DOMDocumentClass();
        //        domB.load(path + "DomXML\\PoPomaindombody.xml");
        //        txt.AddLogMsg(string.Format("表体数据：{0}", list.Count));
        //        U8APIHelper.AddDomDataRow(ref domB, list.Count, "A");

        //        for (int i = 0; i < list.Count; i++)
        //        {
        //            MSXML2.IXMLDOMNodeList domNodesBody = domB.childNodes[0].childNodes[1].childNodes;

        //            domNodesBody[i].attributes.getNamedItem("irowno").nodeValue = Convert.ToString((i + 1));
        //            foreach (var j in list[i].Properties())
        //            {
        //                domNodesBody[i].attributes.getNamedItem(j.Name).nodeValue = j.Value;
        //            }

        //        }

        //        broker.AssignNormalValue("domBody", domB);

        //        //BusinessObject domBody = broker.GetBoParam("domBody");
        //        //domBody.RowCount = list.Count; //设置BO对象行数

        //        //for (int i = 0; i < list.Count; i++)
        //        //{
        //        //    foreach (var j in list[i].Properties())
        //        //    {
        //        //        domBody[i][j.Name.ToString()] = j.Value.ToString();
        //        //    }
        //        //}

        //        //txt.AddLogMsg("表体构建完成");

        //        txt.AddLogMsg("数据构建完成");
        //        //给普通参数VoucherState赋值。此参数的数据类型为int，此参数按值传递，表示单据状态：2新增，1修改，0非编辑
        //        broker.AssignNormalValue("VoucherState", 2);

        //        //该参数CurDom为OUT型参数，由于其数据类型为MSXML2.IXMLDOMDocument2，非一般值类型，因此必须传入一个参数变量。在API调用返回时，可以直接使用该参数
        //        //MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2();
        //        MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.DOMDocumentClass();
        //        broker.AssignNormalValue("CurDom", CurDom);

        //        //该参数curID为OUT型参数，由于其数据类型为string，为一般值类型，因此不必传入一个参数变量。在API调用返回时，可以通过GetResult("curID")获取其值
        //        broker.AssignNormalValue("curID", string.Empty);

        //        //给普通参数UserMode赋值。此参数的数据类型为int，此参数按值传递，表示模式，0：CS;1:BS
        //        broker.AssignNormalValue("UserMode", 0);

        //        txt.AddLogMsg("第六步开始调用API");
        //        #region 第六步：调用API
        //        if (!broker.Invoke())
        //        {
        //            //错误处理
        //            Exception apiEx = broker.GetException();
        //            if (apiEx != null)
        //            {
        //                if (apiEx is MomSysException)
        //                {
        //                    MomSysException sysEx = apiEx as MomSysException;
        //                    rsl.Message = string.Format("系统异常:{0}", sysEx.Message);
        //                    //todo:异常处理
        //                }
        //                else if (apiEx is MomBizException)
        //                {
        //                    MomBizException bizEx = apiEx as MomBizException;
        //                    rsl.Message = string.Format("API异常：{0}", bizEx.Message);
        //                    //todo:异常处理
        //                }
        //                //异常原因
        //                String exReason = broker.GetExceptionString();
        //                if (exReason.Length != 0)
        //                {
        //                    rsl.Message = string.Format("异常原因：{0}", exReason);
        //                }
        //            }
        //            //结束本次调用，释放API资源
        //            broker.Release();
        //            return rsl; ;
        //        }
        //        #endregion

        //        //第七步：获取返回结果

        //        //获取返回值
        //        //获取普通返回值。此返回值数据类型为System.Boolean，此参数按值传递，表示返回值:true:成功,false:失败
        //        if (broker.GetReturnValue() != null)
        //        {
        //            txt.AddLogMsg(broker.GetReturnValue().ToString());
        //            rsl.Message = broker.GetReturnValue().ToString();
        //            return rsl;
        //        }
        //        else
        //        {
        //            rsl.Result = true;
        //        }

        //        if (!rsl.Result)
        //        {
        //            //获取普通OUT参数errMsg。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空
        //            rsl.Message = broker.GetResult("errMsg") as System.String;
        //            txt.AddLogMsg("错误信息为：" + rsl.Message);
        //        }
        //        else
        //        {
        //            var ID = broker.GetResult("curID") as System.String;
        //            txt.AddLogMsg("返回ID：" + ID);
        //            rsl.Data = Seize_cPoID_From_PO_Pomain(ID);
        //        }

        //        //结束本次调用，释放API资源
        //        broker.Release();
        //        return rsl;
        //    }
        //    catch (Exception ex)
        //    {
        //        rsl.Message = "异常错误：" + ex.Message;
        //    }
        //    return rsl;
        //}

        //string Seize_cPoID_From_PO_Pomain(string POID)
        //{
        //    var u8Db = new Katabase().U8Db();
        //    var list = u8Db.Query("PO_Pomain")
        //        .Where("POID", "=", POID)
        //        .Get<DbPoPoMain>();

        //    return list.FirstOrDefault().cPOID;
        //}
    }
}